HDFS的设计理念
- 超大文件,“超大文件”在这里是指具有几百MB,几百GB甚至几百TB大小的文件
- 流式数据访问,HDFS的构建思路是:一次写入,多次读取是最高效的访问模式,数据集通常由数据源生成或从数据源复制过来,接着长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部
- 商用硬件,Hadoop并不需要运行在昂贵且高可靠的硬件上。
- 低时间延迟的数据访问,HDFS是为搞数据吞吐量应用优化的,这可能会以提高实践延迟为大家,对于低延迟的访问需求,HBase是更好的选择
- 大量小文件HDFS能够存储的文件数受限于namenode的内存容量
- 多用户写入,任意修改文件,HDFS的文件写入只支持单个写入者,而且写操作总是以“只添加”方式在文件末尾写数据。它不支持多个写入者操作,也不支持在文件的任意位置进行修改
HDFS的概念
数据块
Hadoop也有类似磁盘文件系统的“数据块”概念,默认为128MB大小。对分布式文件系统中的块进行抽象会带来以下几个好处:第一,文件的大小可以大于网络中任意一个磁盘的容量。第二,使用抽象块而非整个文件作为存储单元,大大简化了存储子系统的设计(例如简化存储管理块的大小是固定的,因此计算单个磁盘能够存储多少个块就相对容易)。同时也消除了对元数据的顾虑(块知识要存储的大块数据,而文件的元数据,如权限信息,并不需要与块一同存储)
namenode和datanode
HDFS集群的两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。namenode管理文件系统的命名空间。它维护者文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。namenode也记录着每个文件中每个块所在的数据节点信息。这些信息并不是永久保存,因为这些信息会在系统启动时根据数据节点信息重建
datanode是文件系统的工作节点,他们根据需要存储并检索数据块,并且定期向namenode发送他们所存储的块的列表